home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 108_01 / show.c < prev    next >
Text File  |  1985-11-13  |  2KB  |  93 lines

  1.  
  2. /**********************************************************
  3.  ***                            ***
  4.  ***    Copyright (c) 1981 by David M. Fogg        ***
  5.  ***                            ***
  6.  ***        2632 N.E. Fremont            ***
  7.  ***        Portland, OR 97212            ***
  8.  ***                            ***
  9.  ***        (503) 288-3502{HM} || 223-8033{WK}        ***
  10.  ***                            ***
  11.  ***    Permission is herewith granted for non-     ***
  12.  ***    commercial distribution through the BDS C    ***
  13.  ***    User's Group; any and all forms of commercial   ***
  14.  ***    redistribution are strenuously unwished-for.    ***
  15.  ***                            ***
  16.  **********************************************************/
  17.  
  18. /* ---> SHOW <--- : Show all chars in a file
  19.  
  20.    21 Nov 80: creation day
  21.  
  22.    Displays all characters in a file; control chars are upcase
  23.    inverse video. Parity bits are stripped.
  24.  
  25.    -P : prefix chars w/ parity bit status: '_' lo; '^' hi
  26.    -C : new line @ <CR> (default is <LF>
  27.    -E : quit at physical EOF (default is ctrl-Z)
  28.  
  29. */
  30.  
  31. #include <std.h>
  32.  
  33. #define MASK   0x7F  /* parity strip mask */
  34.  
  35. main (ac, av)
  36. int ac;
  37. char *av[];
  38. {
  39.    int argn;
  40.    char *arg;
  41.    char pc, c;
  42.    BOOL paron, cron, eofon;
  43.    char ibuf[BUFSIZ];
  44.  
  45.    paron = cron = eofon = NO;
  46.  
  47.    if (ac < 2) {
  48.       puts("usage: show FILE [-C -E -P]\n");
  49.       puts(" FILE: name of file to show\n");
  50.       puts("   -C: new line @ <CR> (default is <LF>\n");
  51.       puts("   -E: stop at physical EOF (default is ^Z)\n");
  52.       puts("   -P: prefix parity status chars: '_' lo; '^' hi\n");
  53.       exit ();
  54.    }
  55.  
  56.    for (argn = 2; argn < ac; ++argn) {       /* get/set options */
  57.       arg = av[argn];
  58.       if (*arg == '-')
  59.      switch (arg[1]) {
  60.         case 'C': cron = YES;
  61.               break;
  62.         case 'E': eofon = YES;
  63.               break;
  64.         case 'P': paron = YES;
  65.               break;
  66.         default :
  67.            errxit("Bad option value");
  68.      }
  69.    }
  70.  
  71.    if (fopen(av[1], ibuf) == ERROR)
  72.       errxit("INPUT FILE ERROR");
  73.  
  74. /*
  75.    ---> MAIN LOOP <---
  76. */
  77.    while ((pc = getc(ibuf)) != CEOF) {
  78.       if (!eofon && pc == CPMEOF) exit ();
  79.       c = pc & MASK;
  80.       if (paron)
  81.      if (pc > MASK)
  82.         putchar('^');
  83.      else
  84.         putchar('_');
  85.       if ((!cron && pc == '\n') ORR (cron && pc == '\r'))
  86.      putchar('\n');
  87.       else if (c >= ' ')
  88.      putc(c, OCON);
  89.       else
  90.      printf("%s%c%s", VIDINV, c + '@', VIDNOR);
  91.    }
  92. }
  93.